#!/bin/bash

# 配置参数
INTERFACE="bond0"
LOG_DIR="/var/log/network"
LOG_FILE="${LOG_DIR}/network_stats_$(date +\%F).log"
TMP_FILE="${LOG_DIR}/.network_stats.tmp"
RETENTION_DAYS=30  # 保留天数
max_32=4294967295       # 32位最大值
max_64=18446744073709551615 # 64位最大值

# 数字格式化显示
format_traffic() {
    local bytes=$1
    if [ $bytes -ge 1048576 ]; then  # 1024*1024
        echo "$(echo "scale=2; $bytes / 1048576" | bc)MB"
    elif [ $bytes -ge 1024 ]; then
        echo "$(echo "scale=2; $bytes / 1024" | bc)kB"
    else
        echo "${bytes}B"
    fi
}

# 创建日志目录
mkdir -p "$LOG_DIR"

# 获取当前流量值
current_rx=$(cat "/sys/class/net/${INTERFACE}/statistics/rx_bytes")
current_tx=$(cat "/sys/class/net/${INTERFACE}/statistics/tx_bytes")

# 初始化差值
rx_diff=0
tx_diff=0

# 计算流量差值
if [[ -f "$TMP_FILE" ]]; then
    previous_rx=$(head -n1 "$TMP_FILE" 2>/dev/null)
    previous_tx=$(tail -n1 "$TMP_FILE" 2>/dev/null)
    
    rx_diff=$((current_rx - previous_rx))
    tx_diff=$((current_tx - previous_tx))
    
    # 处理计数器重置情况（32位/64位溢出）
    [ $rx_diff -lt 0 ] && rx_diff=$((current_rx + (max_64 - previous_rx)))
    [ $tx_diff -lt 0 ] && tx_diff=$((current_tx + (max_64 - previous_tx)))   

fi

# 更新临时文件
echo "$current_rx" > "$TMP_FILE"
echo "$current_tx" >> "$TMP_FILE"

rx_formatted=$(format_traffic $rx_diff)
tx_formatted=$(format_traffic $tx_diff)

# 写入日志（格式：时间, RX流量, TX流量）
timestamp=$(date +"%Y-%m-%d %H:%M:%S")

echo "${timestamp}, ${rx_formatted}, ${tx_formatted}" >> "$LOG_FILE"

# 删除30天前的日志文件
find "$LOG_DIR" -name "network_stats_*.log" -mtime +$RETENTION_DAYS -exec rm -f {} \;

exit
